package com.divemotor.ventarepuestosinternet.model;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

@Entity
@Table(name="SIS_MAE_PERFIL")
@NamedQueries({
	@NamedQuery(name="Perfil.getData", 
				query="SELECT new com.divemotor.ventarepuestosinternet.beans.adapter.DataAdapter(p.idPerfil, p.nombre) " +
					  "FROM Perfil p WHERE p.sistema.idSistema = :idSistema AND p.idPerfil <> :idPerfil")
})
public class Perfil implements Serializable {
	
	private static final long serialVersionUID = 5189302931930581903L;

	@Id
	@Column(name="COD_ID_PERFIL")
	private Integer idPerfil;
	@Column(name="DES_NOMBRE",length=50)
	private String nombre;
	@Column(name="TXT_URL_INICIO",length=100)
	private String urlInicio;
	@Column(name="TXT_COD_PERFIL",length=50)
	private String codigoPerfil;
	//TODO RETIRAR LUEGO DE PRUEBAS
	@Column(name="TXT_URL_INICIO2",length=100)
	private String urlInicio2;
	@Column(name="IND_PERFIL_EXTERNO")
	private String indPerfilCliente;
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="COD_ID_SISTEMA")
	private Sistema sistema;
	@ManyToMany(fetch=FetchType.LAZY)
	@JoinTable(name = "SIS_MAE_OPCION_PERFIL", 
				joinColumns = @JoinColumn( name = "COD_ID_PERFIL",referencedColumnName = "COD_ID_PERFIL"), 
				inverseJoinColumns = @JoinColumn(name = "COD_ID_OPCION",referencedColumnName = "COD_ID_OPCION"))
	private List<Opcion> listaOpciones;
	@ManyToMany(cascade = CascadeType.ALL, mappedBy = "listaPerfiles", fetch=FetchType.LAZY)
	private List<Usuario> listaUsuarios;

	public Perfil() {
		
	}
	
	public Perfil(Integer idPerfil, String nombre) {
		this.idPerfil = idPerfil;
		this.nombre = nombre;
	}

	public Perfil(Integer idPerfil) {
		this.idPerfil = idPerfil;
	}

	public Integer getIdPerfil() {
		return idPerfil;
	}

	public void setIdPerfil(Integer idPerfil) {
		this.idPerfil = idPerfil;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public Sistema getSistema() {
		return sistema;
	}

	public void setSistema(Sistema sistema) {
		this.sistema = sistema;
	}

	public List<Opcion> getListaOpciones() {
		return listaOpciones;
	}

	public void setListaOpciones(List<Opcion> listaOpciones) {
		this.listaOpciones = listaOpciones;
	}

	public List<Usuario> getListaUsuarios() {
		return listaUsuarios;
	}

	public String getUrlInicio() {
		return urlInicio;
	}

	public void setUrlInicio(String urlInicio) {
		this.urlInicio = urlInicio;
	}

	public void setListaUsuarios(List<Usuario> listaUsuarios) {
		this.listaUsuarios = listaUsuarios;
	}

	public String getCodigoPerfil() {
		return codigoPerfil;
	}

	public void setCodigoPerfil(String codigoPerfil) {
		this.codigoPerfil = codigoPerfil;
	}

	public String getUrlInicio2() {
		return urlInicio2;
	}

	public void setUrlInicio2(String urlInicio2) {
		this.urlInicio2 = urlInicio2;
	}

	public String getIndPerfilCliente() {
		return indPerfilCliente;
	}

	public void setIndPerfilCliente(String indPerfilCliente) {
		this.indPerfilCliente = indPerfilCliente;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((idPerfil == null) ? 0 : idPerfil.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj){
			return true;
		}
		if (obj == null){
			return false;
		}
		if (getClass() != obj.getClass()){
			return false;
		}
		Perfil other = (Perfil) obj;
		if (idPerfil == null) {
			if (other.idPerfil != null){
				return false;
			}
		} else if (!idPerfil.equals(other.idPerfil)){
			return false;
		}
		return true;
	}
	
}
